/**
 * @file mg_cdoas.h
 * @author Charry_Le (530673764@qq.com)
 * @brief 子设备新房头文件
 * @version 0.1
 * @date 2024-02-17
 * 
 * @copyright Moorgen Intelligent Technologies Copyright (c) 2024
 * 
 */

#ifndef __MG_AIR_CDOAS_H__
#define __MG_AIR_CDOAS_H__
#include "ite/itp.h"

/*******************************新风默认参数**************************************/
//设置PM2.5上下限
#define  DEV_SET_PM25_MAX				100		//100ug/m3
#define  DEV_SET_PM25_MIN				0		//0ug/m3
//设置CO2上下限
#define  DEV_SET_CO2_MAX				3500	//3500PPM
#define  DEV_SET_CO2_MIN				0		//0PPM
//设置Hum上下限
#define  DEV_SET_HUM_MAX				80		//80%
#define  DEV_SET_HUM_MIN				30		//30%
//设置+/-梯度:1%
#define  PM25_GRADS						1		//1ug/m3
#define  CO2_GRADS						35		//35PPM
#define  HUM_GRADS						1		//1%
//默认支持模式
#define CDOAS_MODE_NORMAL				0x00	//自动换气，全热交换，普通换气

//风速
typedef enum
{
	CDOAS_WIND_SPEED_AUTO			= 0,	//自动
	CDOAS_WIND_SPEED_LOW			= 1,	//低	（微风 tiny）
	CDOAS_WIND_SPEED_MID			= 2,	//中	（轻风 small）
	CDOAS_WIND_SPEED_HIGH			= 3,	//高	（大风 big）
	CDOAS_WIND_SPEED_ERR			= 4,	//出错
} ENUM_CDOAS_WIND_SPEED;
//新风模式
typedef enum
{
	CDOAS_MODE_NULL 				= 0,//无
	CDOAS_MODE_AUTO 				= 1,//自动换气
	CDOAS_MODE_HEAT_EXCHANGE		= 2,//全热交换
	CDOAS_MODE_NORMAL_EXCHANGE		= 3,//普通换气
	CDOAS_MODE_CDOAS				= 4,//新风
	CDOAS_MODE_DEHUM				= 5,//除湿
	CDOAS_MODE_INNER_LOOP			= 6,//内循环
	CDOAS_MODE_SLEEP				= 7,//自定义1
	CDOAS_MODE_FRESH				= 8,//自定义2
} ENUM_CDOAS_MODE;
//支持的设置值
typedef enum
{
	CDOAS_SUPPOT_NULL			= 0,	//不支持设置
	CDOAS_SUPPOT_CO2			= 1,	//支持设置CO2
	CDOAS_SUPPOT_PM25			= 2,	//支持设置PM2.5
	CDOAS_SUPPOT_HUM			= 3,	//支持设置湿度
} ENUM_CDOAS_SUPPOT;

#pragma pack(push) //开始对齐
#pragma pack(1)    //内存以1字节对齐
//新风状态
typedef struct
{
	bool	    		    Switch;		//开关机状态
	ENUM_CDOAS_WIND_SPEED	WindSpeed;	//(新风)风速
	ENUM_CDOAS_MODE 		Mode;		//(新风)模式
	uint16_t 				PM25SetValu;//设置值
	uint16_t 				CO2SetValu;	//设置值
	uint16_t 				HumSetValu;	//设置值
	bool			        OccupyState;//占用状态
} STRUCT_CDOAS_VALU;
//配置
typedef union
{
	uint8_t ConfigTable[256];
	struct
	{
		uint8_t Save_Flag;			//是否储存标志
		uint8_t	Suppot;				//支持的设置参数
		uint8_t	In_Wind_Speed;		//进风风速
		uint8_t	Out_Wind_Speed;		//出风风速
		uint8_t	Mode_Suppot;		//自定义模式设置
		uint8_t res0[4];					// 背光
		uint8_t res[80-9];			//预留
		uint8_t User_Mode1_Name[16];//自定义模式1名字
		uint8_t User_Mode2_Name[16];//自定义模式2名字
	}byte;
}CDOAS_CONFIG;
#pragma pack(pop) //结束对齐

extern STRUCT_CDOAS_VALU	Cdoas;              //新风状态
extern STRUCT_CDOAS_VALU	Cdoas_After_Occupy;//占用后的状态
extern CDOAS_CONFIG         Cdoas_Config;       //新风配置参数


//获取新风支持的设置
ENUM_CDOAS_SUPPOT Get_Cdoas_Suppot(void);
//获取新风设置值
uint16_t Get_Cdoas_Set_Value(void);
//新风设置值++
void Cdoas_Value_Add(void);
//新风设置值--
void Cdoas_Value_Sub(void);
//获取新风环境值
uint16_t Get_Cdoas_Current_Value(void);
//新风开关控制
void Cdoas_Switch_Set(bool Switch);
//新风设置值设置
void Cdoas_Value_Set(uint16_t SetValue);
//新风风速设置
void Cdoas_Fan_Set(ENUM_CDOAS_WIND_SPEED Speed);
//新风风速+
void Cdoas_Fan_Add(void);
//新风风速-
void Cdoas_Fan_Sub(void);
//新风模式设置
void Cdoas_Mode_Set(ENUM_CDOAS_MODE Mode);
//新风模式切换(按键触发)
void Cdoas_Mode_Cut(void);
//模式是否支持
uint8_t Cdoas_Mode_Is_Support(ENUM_CDOAS_MODE Mode);
#endif